package com.njtech.pet.dao;

import com.njtech.pet.entity.SingleRecord;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author lxj
 * Date 2020-03-25 10:31
 * Description 统计数据的DAO层
 */
public interface StaticDao {
    /**
     * 获取days天内的注册用户数量
     * @param days 几天以内？如果为null则为从头开始
     * @param isMember 是否是会员？
     * @param state 用户状态
     * @return 数量
     */
    int getUserNumInDays(@Param("days") Integer days, @Param("isMember") boolean isMember, @Param("state") String state);

    /**
     * 获取days天内的活跃用户数量
     * @param days 几天以内？如果为null则为从头开始
     * @param isMember 是否是会员？
     * @return 数量
     */
    int getActiveUserNumInDays(@Param("days") Integer days, @Param("isMember") boolean isMember);

    /**
     * 获得过去count年/月/天/周前开始到现在 类型为action，状态为state，日期格式为dateFormat的（%Y为按年记,%Y%m为按月计,%Y%m%d为按日计,%Y%u为按周计）
     * @param count 可NULL
     * @param dateFormat 日期格式为dateFormat的（%Y为按年记,%Y%m为按月计,%Y%m%d为按日计,%Y%u为按周计）
     * @param action 可NULL
     * @param state 可NULL
     * @return
     */
    List<SingleRecord> getActionCountInDate(@Param("count") Integer count, @Param("dateFormat") String dateFormat, @Param("action") String action, @Param("state") String state);

    /**
     * 获取若干天内，对应type和state的Item的数量
     * @param days 若干天数
     * @param type 类型
     * @param state 状态
     * @param subject 险种
     * @return 返回结果
     */
    int getItemNumInDaysByTypeAndStateAndSubject(@Param("days") Integer days, @Param("type") String type, @Param("state") String state, @Param("subject") String subject);

    /**
     * 获得过去count年/月/天/周前开始到现在 类型为type，状态为state，日期格式为dateFormat的（%Y为按年记,%Y%m为按月计,%Y%m%d为按日计,%Y%u为按周计）
     * @param count 可NULL
     * @param type 可NULL
     * @param state 可NULL
     * @param dateFormat 日期格式为dateFormat的（%Y为按年记,%Y%m为按月计,%Y%m%d为按日计,%Y%u为按周计）
     * @param subject 险种 可null
     * @return 结果
     */
    List<SingleRecord> getItemCountInDate(@Param("count") Integer count, @Param("type") String type, @Param("state") String state, @Param("dateFormat") String dateFormat, @Param("subject") String subject);
    /**
     * 获取若干天内，对应type和state的Bill的数量
     * @param days 若干天数
     * @param type 类型
     * @param state 状态
     * @return 返回结果
     */
    int getBillNumInDaysByTypeAndState(@Param("days") Integer days, @Param("type") String type, @Param("state") String state);

    /**
     * 获得过去count年/月/天/周前开始到现在 类型为type，状态为state，日期格式为dateFormat的（%Y为按年记,%Y%m为按月计,%Y%m%d为按日计,%Y%u为按周计）
     * @param count 可NULL
     * @param type 可NULL
     * @param state 可NULL
     * @param dateFormat 日期格式为dateFormat的（%Y为按年记,%Y%m为按月计,%Y%m%d为按日计,%Y%u为按周计）
     * @return 结果
     */
    List<SingleRecord> getBillCountInDate(@Param("count") Integer count, @Param("type") String type, @Param("state") String state, @Param("dateFormat") String dateFormat);

}
